package com.cjy.map;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/*
    java.util.map<k,v>集合
    Map集合的特点：
        1.Map集合是一个双列集合，一个元素包含两个值（一个是key,一个是value）
        2.Map集合中的元素，key和value的数据类型可以是相同的，也可以不同
        3.Map集合中的元素，key是不允许重复的，value是可以重复的
        4.Map集合中的元素，key和value是一一对应
    java.util.HashMap<k,v>集合 implements Map<k,v>接口
    HashMap集合的特点：
        1.HashMap集合底层是哈希表：查询的速度特别的快
            JDK1.8之前：数组+单向链表
            JDK1.8之后：数组+单向链表/红黑树（链表的长度超过8）：提高查询的速度
        2.HashMap集合是一个无序的集合，储存元素和取出元素的顺序有可能不一致
    java.util.LinkedHashMap<k,v>集合 extends HashMap<k,v>集合
    LinkedHashMap的特点：
        1.LinkedHashMap集合底层是哈希表+链表（保证迭代的顺序）
        2.LinkedHashMap集合是一个有序的集合，储存元素和取出元素的顺序是一致的
 */
public class TestHashMap {
    public static void main(String[] args) {
        Map<Integer,String> map = new HashMap();
        map.put(2,"A");
        map.put(5,"C");
        map.put(4,"B");
        map.put(3,"D");
        //遍历1
        map.forEach((id,name) -> System.out.println("id:"+id+" name:"+name));

        System.out.println("-------------------------------");
        //遍历2 keySet：返回一个将map所有键的集合 在通过map.get() 键找值方法遍历
        Set<Integer> set = map.keySet();
        for (Integer key:set){
            String value = map.get(key);
            System.out.println("id:"+key+" name:"+value);
        }

        System.out.println("------------------------------");

        /*遍历3
        Map.Entry<k,v>:在Map接口中有一个内部几口Entry
        作用：当Map集合一创建那么就会在Map集合中创建一个Entry对象,用来记录键于值（键值对对象,键于值的映射关系）
        entrySet:返回map映射表中所有的键于值的集合
         */
        Set<Map.Entry<Integer,String>> set1 = map.entrySet();
        for (Map.Entry<Integer, String> entry : set1){
            Integer key1 = entry.getKey(); //getKey：Entry对象中的方法 获取key
            String value2 = entry.getValue();//getValue：Entry对象中的方法 获取value
            System.out.println("id:"+key1+" name:"+value2);
        }
    }
}
